<?php
/**
 * JoiEditor - Joostina WYSIWYG Editor
 *
 * Core class
 *
 * @version 1.0 beta 3
 * @package JoiEditor
 * @subpackage	JoiEditor
 * @filename joieditor.class.php
 * @author JoostinaTeam
 * @copyright (C) 2008-2010 Joostina Team
 * @license see license.txt
 *
 **/

defined('_VALID_MOS') or die();

$mainframe->addLib('dbconfig');

global $my;
if(isset($_COOKIE['mce_user'])) {
	$my->id = $_COOKIE['mce_user'];
}

/**
 * joiEditor
 *
 * @package JoiEditor
 */
class joiEditor extends dbConfig {

	/** @var string CSS-идентификатор класса текстовой области */
	var $textarea = 'mceEditor';
	/** @var string Язык редактора*/
	var $language = 'ru';
	/** @var integer Ширина области редактора */
	var $width = '';
	/** @var integer Высота области редактора */
	var $height = '300';
	/** @var string Тема визуального редактора */
	var $theme = 'advanced';
	/** @var string Активированные плагины */
	var $plugins = 'directionality,images,inlinepopups,paste,safari,template';
	/** @var string Кнопки визуального редактора: ряд 1	 */
	var $theme_advanced_buttons1 = 'bold,italic,underline,strikethrough,justifyleft,justifycenter,justifyright,justifyfull,pastetext,pasteword,bullist,numlist,blockquote,undo,redo,link,unlink,cleanup,code,images';
	/** @var string Кнопки визуального редактора: ряд 2 */
	var $theme_advanced_buttons2 = '';
	/** @var string Кнопки визуального редактора: ряд 3 */
	var $theme_advanced_buttons3 = '';
	/** @var string Кнопки визуального редактора: ряд 4 */
	var $theme_advanced_buttons4 = '';
	/** @var string Позиция панели с кнопками */
	var $theme_advanced_toolbar_location = 'top';
	/** @var string Выравнивание панели с кнопками */
	var $theme_advanced_toolbar_align = 'left';
	/** @var string Позиция статусной строки */
	var $theme_advanced_statusbar_location = 'bottom';
	/** @var string Изменение размеров области редактора */
	var $theme_advanced_resizing = 'true';
	/** @var string Ресайз по горизинтали */
	var $theme_advanced_resize_horizontal = 'false';
	/** @var string Путь к JS-библиотеке редактора */
	var $script_url = 'components/com_joieditor/core/tiny_mce.js';
	/** @var string Директория тем оформления */
	var $themes_dir = 'components/com_joieditor/core/themes';
	/** @var string Директория плагинов */
	var $plugins_dir = 'components/com_joieditor/core/plugins';
	/** @var string Корневая диреткория менеджера изображений */
	var $image_manager_dir = '/images/stories';
	/** @var integer Работа с директориями пользователей */
	var $image_manager_owndir = 0;
	/** @var string Ширина средних эскизов изображений */
	var $im_width_to_link = '500';
	/** @var string Высота средних эскизов изображений */
	var $im_height_to_link = '500';
	/** @var integer Разрешить/запретить загрузку изображений */
	var $im_download_img = 1;
	/** @var integer Разрешить/запретить удаление изображений */
	var $im_del_img = 0;
	/** @var integer Разрешить/запретить переименование изображений */
	var $im_rename_img = 0;
	/** @var integer Разрешить/запретить создание директорий */
	var $im_create_dir = 0;
	/** @var integer Разрешить/запретить удаление директорий */
	var $im_del_dir = 0;

	var $_classes = array('forecolor'=>'forecolorpicker', 'backcolor'=>'backcolorpicker');
	var $_add_buttons  = array();


	/**
	 * constructor
	 *
	 * @param database A database connector object
	 * @param string group name
	 * @param string subgroup name
	 * @return void
	 */
	function joiEditor(&$db, $group = 'joieditor', $subgroup = 'default') {

		$this->_real_subgroup = $subgroup;

		$this->dbConfig($db, $group, $this->_real_subgroup);
		if(!$this->_loaded) {
			$this->dbConfig($db, $group, 'default');
			$this->_subgroup = $this->_real_subgroup;
		}

		$this->_add_buttons = $this->get_add_buttons();
	}

	function &getInstance() {
		static $instance;

		if (!is_object( $instance )) {
			$db = &database::getInstance();
			$instance = new joiEditor($db);
		}

		return $instance;
	}

	/**
	 * joiEditor::get_lang_file()
	 *
	 * Возвращает имя языкового файла
	 *
	 * @return string
	 */
	function get_lang_file() {
		$mainframe = &mosMainFrame::getInstance();
		$path = dirname( __FILE__ );

		$lang = $mainframe->get('lang');
		if($mainframe->isAdmin()) {
			if(is_file($path.DS.'language'.DS.$lang.DS.'administrator'.DS.'com_joieditor.php')) {
				$lang_file = $path.DS.'language'.DS.$lang.DS.'administrator'.DS.'com_joieditor.php';
			}
			else {
				$lang_file = $path.DS.'language'.DS.'russian'.DS.'administrator'.DS.'com_joieditor.php';
			}
		}
		else {
			if(is_file($path.DS.'language'.DS.$lang.DS.'frontend'.DS.'com_joieditor.php')) {
				$lang_file = $path.DS.'language'.DS.$lang.DS.'frontend'.DS.'com_joieditor.php';
			}
			else {
				$lang_file = $path.DS.'language'.DS.'russian'.DS.'frontend'.DS.'com_joieditor.php';
			}
		}

		return $lang_file;
	}

	/**
	 * joiEditor::load_editor()
	 *
	 * Подключение jQuery-плагина и js-файла с инициализацией редактора
	 *
	 * @return void
	 */
	function load_editor() {
		global $option, $my;
		$mainframe = &mosMainFrame::getInstance();
		//Помещаем в куки значение option -
		//это нужно для работы менеджера изображений
		setcookie('mce_option', $option, time()+3600, '/');

		//Подключаем jQuery-плагин
		if($mainframe->isAdmin()) {
			$mainframe->addJS($mainframe->getCfg('live_site').'/'.'components/com_joieditor/core/jquery.tinymce.js');
			setcookie('mce_user', $my->id, time()+3600, '/');
		}
		else {
			$mainframe->addJS($mainframe->getCfg('live_site').'/'.'components/com_joieditor/core/jquery.tinymce.js', 'js');
		}
		$mainframe->addJS($mainframe->getCfg('live_site').'/'.'components/com_joieditor/core/jquery.tinymce.js', 'js');
		//Подключаем скрипт с инициализациями
		$this->_init();
	}

	/**
	 * joiEditor::_init()
	 *
	 * Определение имени подключаемого файла с инициализацией редактора и его подключение
	 *
	 * @return void
	 */
	function _init() {
		$mainframe = &mosMainFrame::getInstance();
		global $my;

		$init_dir = 'components/com_joieditor/inits';
		$init_file_base = $init_file = $init_dir .'/'.$this->_subgroup .'.js';

		if($my->id) {
			$my_group = $this->get_my_gid();
			$init_file = $init_dir .'/'.$this->_subgroup . '_gid_' .$my_group.'.js';
		}

		//Проверяем наличие inits/[$com_component]_gid_[$my_group].js
		if(is_file($mainframe->getCfg('absolute_path').DS.$init_file)) {
			$init_file = $mainframe->getCfg('live_site').'/'.$init_file;
		}
		//Проверяем наличие inits/[$com_component].js
		else if(is_file($mainframe->getCfg('absolute_path').DS.$init_file_base)) {
			$init_file = $mainframe->getCfg('live_site').'/'.$init_file_base;
		}
		//Проверяем наличие inits/default_gid_[$my_group].js
		else if(is_file($mainframe->getCfg('absolute_path').DS.$init_dir .DS.'default_gid_'.$my_group.'.js')) {
			$init_file = $mainframe->getCfg('live_site').'/'.$init_dir .'/default_gid_'.$my_group.'.js';
		}
		//Подключаем inits/default.js
		else {
			$init_file = $init_dir .'/'.'default.js';
			$init_file = $mainframe->getCfg('live_site').'/'.$init_file;
		}

		if($mainframe->isAdmin()) {
			$mainframe->addJS($init_file);
		}
		else {
			$mainframe->addJS($init_file, 'custom');
		}

	}

	/**
	 * joiEditor::display_config()
	 *
	 * Контроллер страницы конфигурирования для бэкэнда
	 *
	 * @param string $option
	 * @param integer $isNew
	 * @return
	 */
	function display_config($option, $isNew = 0) {
		$mainframe = &mosMainFrame::getInstance();

		$list = array();

		//Язык
		$list['langs'] = $this->get_langs_list();
		//Темы
		$list['themes'] = $this->get_themes_list();
		//Плагины
		$list['plugins'] = $this->get_plugins_list();

		//Тулбар
		$tools = $this->theme_advanced_buttons1
				. ',' .$this->theme_advanced_buttons2
				. ',' .$this->theme_advanced_buttons3
				. ',' .$this->theme_advanced_buttons4 ;
		$list['buttons1'] = $this->get_toolbar($tools, 'theme_advanced_buttons1');

		//Позиция тулбара
		$list['toolbar_location'] = $this->get_theme_advanced_toolbar_location();
		//Выравнивание тулбара
		$list['toolbar_align'] = $this->get_theme_advanced_toolbar_align();
		//Строка состояния
		$list['statusbar_location'] = $this->get_theme_advanced_statusbar_location();
		//разрешить/запретить ресайз редактора
		$list['resizing'] = $this->get_theme_advanced_resizing();
		//разрешить/запретить ресайз редактора по горизонтали
		$list['resizing_hor'] = $this->get_theme_advanced_resizing();

		if($isNew) {
			$components = $this->get_components_list();
			$list['components'] = mosHTML::selectList($components, 'group', 'class="inputbox"', 'value', 'text');
		}

		include_once(JPATH_BASE.DS.'administrator'.DS.'components'.DS.'com_joieditor'.DS.'view'.DS.'config.php');
	}


	/**
	 * joiEditor::save_config()
	 *
	 * Сохранение параметров конфигурации в БД.
	 * Инициация процессов сохранения информации в конфигурационные файлы
	 *
	 * @return
	 */
	function save_config() {

		if(!$this->bindConfig($_REQUEST)) {
			echo "<script> alert('".$this->_error."'); window.history.go(-1); </script>";
			exit();
		}

		$this->plugins = implode(',', $_REQUEST['plugins']);
		//$this->theme_advanced_buttons1 = implode(',', $_REQUEST['theme_advanced_buttons1']);
		//$this->theme_advanced_buttons2 = implode(',', $_REQUEST['theme_advanced_buttons2']);
		//$this->theme_advanced_buttons3 = implode(',', $_REQUEST['theme_advanced_buttons3']);
		//$this->theme_advanced_buttons4 = implode(',', $_REQUEST['theme_advanced_buttons4']);
		$this->theme_advanced_buttons1 = $_REQUEST['buttons1'];
		$this->theme_advanced_buttons2 = $_REQUEST['buttons2'];
		$this->theme_advanced_buttons3 = $_REQUEST['buttons3'];
		$this->theme_advanced_buttons4 = $_REQUEST['buttons4'];

		if(!$this->storeConfig()) {
			echo "<script> alert('".$this->_error."'); window.history.go(-1); </script>";
			exit();
		}

		//Сохраняем скрипт с инициализацией
		$this->save_init();

		//Сохраняем конфиг менеджера изображений
		$this->save_imgmanager_config();
	}


	/**
	 * joiEditor::save_init()
	 *
	 * Создание JS-файла инициализации редактора
	 *
	 * @return
	 */
	function save_init() {

		$mainframe = &mosMainFrame::getInstance();
		$init_dir = $mainframe->getCfg('absolute_path').DS.'components'.DS.'com_joieditor'.DS.'inits';

		$content = $this->get_init_content();

		$fp = fopen($init_dir .DS .$this->_subgroup .'.js', 'w');
		fwrite($fp, $content);
		fclose($fp);
	}


	/**
	 * joiEditor::get_imagemanager_config()
	 *
	 * Возвращает имя файла с настройками менеджера изображений
	 *
	 * @param string $subgroup
	 * @return string
	 */
	function get_imagemanager_config($subgroup) {
		global $my;

		$init_dir = 'components/com_joieditor/im_configs';
		$init_file_base = $init_file = $init_dir .'/'.$subgroup .'.php';

		$my_group = 0;
		if($my->id ) {
			$my_group = $this->get_my_gid();
			$init_file = $init_dir .'/'.$subgroup . '_gid_' .$my_group.'.php';
		}
		//Проверяем наличие [component]_gid_[$my_group].php
		if(is_file( JPATH_BASE.DS.$init_file)) {
			$c_file = $init_file;
		}
		//Проверяем наличие [component].php
		else if(is_file( JPATH_BASE.DS.$init_file_base)) {
			$c_file = $init_file_base;
		}
		//Проверяем наличие default_gid_[$my_group].php
		else if(is_file( JPATH_BASE.DS.$init_dir .DS.'default_gid_'.$my_group.'.php')) {
			$c_file = $init_dir .'/default_gid_'.$my_group.'.php';
		}

		else {
			$c_file = $init_dir .'/'.'default.php';
		}

		$c_file = JPATH_BASE.DS.$c_file;
		return $c_file;
	}


	/**
	 * joiEditor::save_imgmanager_config()
	 *
	 * Создание php-файла с настройками менеджера изображений
	 *
	 * @return
	 */
	function save_imgmanager_config() {

		$config_file = 	JPATH_BASE.DS.'components'.DS.'com_joieditor'.DS.'im_configs'.DS.$this->_subgroup .'.php';

		$content = $this->get_imgmanager_config_content();

		$fp = fopen($config_file, 'w');
		fwrite($fp, $content);
		fclose($fp);
	}


	/**
	 * joiEditor::get_my_gid()
	 *
	 * Возвращает id группы пользователя
	 *
	 * @return inreger
	 */
	function get_my_gid() {
		global $my;
		$database = &database::getInstance();

		$query = "SELECT gid FROM #__users WHERE id = ".(int)$my->id;
		$database->setQuery($query);
		return $database->loadResult();
	}


	/**
	 * joiEditor::delete_config()
	 *
	 * Удаление js-файла с инициализацией визуального редактора
	 * Удаление записей из таблицы конфигураций
	 *
	 * @param string $subgroup
	 * @return void
	 */
	function delete_config($subgroup) {

		$database = &database::getInstance();

		$init_file = JPATH_BASE.DS.'components'.DS.'com_joieditor'.DS.'inits'.DS.$subgroup .'.js';
		$config_file = 	JPATH_BASE.DS.'components'.DS.'com_joieditor'.DS.'im_configs'.DS.$subgroup .'.php';

		$files = array($init_file, $config_file);
		foreach($files as $file) {
			unlink($file);
		}

		$query = "DELETE FROM #__config WHERE subgroup = '".$subgroup."'";
		$database->setQuery($query);
		return $database->query();
	}


	/**
	 * joiEditor::get_init_content()
	 *
	 * Генерация содержимого JS-файла с инициализацией визуального редактора
	 *
	 * @return text
	 */
	function get_init_content() {

		$content = '$().ready(function() {';
		$content .= "$('textarea.mceEditor').tinymce({ \n";

		$content .= "script_url : _live_site+'/".$this->script_url."',\n";
		$content .= 'theme : "'.$this->theme.'",'."\n";
		$content .= 'language : "'.$this->language.'",'."\n";
		$content .= 'width : "'.$this->width.'",'."\n";
		$content .= 'height : "'.$this->height.'",'."\n";
		$content .= 'plugins : "'.$this->plugins.'",'."\n";
		$content .= 'theme_advanced_buttons1 : "'.$this->theme_advanced_buttons1.'",'."\n";
		$content .= 'theme_advanced_buttons2 : "'.$this->theme_advanced_buttons2.'",'."\n";
		$content .= 'theme_advanced_buttons3 : "'.$this->theme_advanced_buttons3.'",'."\n";
		$content .= 'theme_advanced_buttons4 : "'.$this->theme_advanced_buttons4.'",'."\n";
		$content .= 'theme_advanced_toolbar_location : "'.$this->theme_advanced_toolbar_location.'",'."\n";
		$content .= 'theme_advanced_toolbar_align : "'.$this->theme_advanced_toolbar_align.'",'."\n";
		$content .= 'theme_advanced_statusbar_location : "'.$this->theme_advanced_statusbar_location.'",'."\n";
		$content .= 'theme_advanced_resizing : '.$this->theme_advanced_resizing.','."\n";
		$content .= 'theme_advanced_resize_horizontal : '.$this->theme_advanced_resize_horizontal.','."\n";
		$content .= 'content_css : _live_site+"/templates/"+_cur_template+"/css/editor.css",'."\n";
		$content .= 'relative_urls : false,'."\n";
		$content .= 'convert_urls : false'."\n";

		$content .= ' });'."\n";
		$content .=' });'."\n";

		return $content;
	}


	/**
	 * joiEditor::get_imgmanager_config_content()
	 *
	 * Генерация содержимого PHP-файла с настройками менеджера изображений
	 *
	 * @return text
	 */
	function get_imgmanager_config_content() {
		$content = '<?php'."\n";

		if(!$this->image_manager_owndir) {
			$content .= "define('DIR_IMAGES','".$this->image_manager_dir."');"."\n";
		}

		$content .= "define('DIR_OWN','".$this->image_manager_owndir."');"."\n";
		$content .= "define('DIR_FILES','".$this->image_manager_dir."');"."\n";
		$content .= "define('IM_DOWNLOAD_IMG','".$this->im_download_img."');"."\n";
		$content .= "define('IM_DEL_IMG','".$this->im_del_img."');"."\n";
		$content .= "define('IM_RENAME_IMG','".$this->im_rename_img."');"."\n";
		$content .= "define('IM_CREATE_DIR','".$this->im_create_dir."');"."\n";
		$content .= "define('IM_DEL_DIR','".$this->im_del_dir."');"."\n";
		$content .= "define('WIDTH_TO_LINK', ".$this->im_width_to_link.");"."\n";
		$content .= "define('HEIGHT_TO_LINK', ".$this->im_height_to_link.");"."\n";
		$content .= "define('CLASS_LINK', 'lightbox');"."\n";
		$content .= "define('REL_LINK', 'lightbox');"."\n";
		$content .= '?>';

		return $content;
	}


	/**
	 * joiEditor::get_configs_list()
	 *
	 * Возвращает массив имен файлов с JS инициализациями визуального редактора
	 *
	 * @return array
	 */
	function get_configs_list() {
		$arr = array();

		$list = mosReadDirectory ( JPATH_BASE.DS.'components'.DS.'com_joieditor'.DS.'inits', '.js');

		$i = 0;
		foreach($list as $v) {
			if($v!=='.' && $v!=='..') {
				$v = str_replace('.js','', $v);
				if(stripos($v, '_gid_')!==false) {
					$init = explode('_gid_', $v);
					$arr[$i]->component = $init[0];
					$arr[$i]->user_group = $init[1];
				}
				else {
					$arr[$i]->component = $v;
					$arr[$i]->user_group = 0;
				}
				$i++;
			}
		}

		return $arr;
	}


	/**
	 * joiEditor::get_user_groups()
	 *
	 * Возвращает массив имен групп пользователей
	 *
	 * @return array
	 */
	function get_user_groups() {
		$database = &database::getInstance();

		$arr = array();

		$query = "SELECT group_id, name  FROM #__core_acl_aro_groups";
		$database->setQuery($query);
		$groups =  $database->loadObjectList();

		foreach($groups as $group) {
			$arr[$group->group_id] = $group->name;
		}

		return $arr;
	}

	/**
	 * joiEditor::get_langs_list()
	 *
	 * Возвращает массив имен доступных языковых версий
	 *
	 * @return array
	 */
	function get_langs_list() {

		$langs = mosReadDirectory ( JPATH_BASE.DS.'components/com_joieditor/core'.DS.'langs', '.js');
		$arr = array();

		foreach($langs as $lang) {
			$lang = str_replace('.js','', $lang);
			$arr[] = mosHTML::makeOption($lang, $lang);
		}

		return $arr;

	}

	/**
	 * joiEditor::get_themes_list()
	 *
	 * Возвращает массив названий доступных тем для визуального редактора
	 *
	 * @return array
	 */
	function get_themes_list() {
		$dir_list = scandir ( JPATH_BASE.DS.$this->themes_dir);
		$arr = array();

		foreach($dir_list as $dir) {
			if($dir!=='.' && $dir!=='..')
				$arr[] = mosHTML::makeOption($dir, $dir);
		}

		return $arr;

	}

	/**
	 * joiEditor::get_plugins_list()
	 *
	 * Возвращает перечень доступных плагинов визуального редактора.
	 *
	 * @return text
	 *
	 */

	//TODO: сделать здесь только возврат массива. HTML-обертку из метода исключить.

	function get_plugins_list() {

		$dir_list = scandir (JPATH_BASE.DS.$this->plugins_dir);
		$plugins_arr = explode(',', $this->plugins);

		$arr = array();
		$return = '';

		foreach($dir_list as $dir) {
			if($dir!=='.' && $dir!=='..') {
				$checked = (in_array($dir, $plugins_arr) ? 'checked="checked"' : '');
				$arr[] = '<input type="checkbox" name="plugins[]" value="'.$dir.'" '.$checked.' /><label>'.$dir.'</label><br />';
			}

		}

		$plug_arr_chunk = array_chunk($arr, 10);

		$return .= '<table><tr>';
		foreach($plug_arr_chunk as $plug_arr) {
			$return .= '<td>';
			foreach($plug_arr as $v) {
				$return .= $v;
			}
			$return .= '</td>';
		}
		$return .= '</tr></table>';

		return $return;

	}

	/**
	 * joiEditor::get_components_list()
	 *
	 * Возвращает массив названий установленных компонентов
	 *
	 * @return array
	 */
	function get_components_list() {

		$database = &database::getInstance();

		//$isset_configs = array();
		//$isset_configs = self::get_configs_list();

		$query = "SELECT c.option AS value, c.name AS text, c.link FROM #__components AS c WHERE c.link != '' ORDER BY c.name";
		$database->setQuery($query);
		$rows = $database->loadObjectList();

		$i = 2;
		$components[0] = mosHTML::makeOption('default','default');
		$components[1] = mosHTML::makeOption('com_content', _C_JOIEDITOR_ADMIN_COMCONTENT);
		foreach($rows as $row) {
			$components[$i]->value = $row->value;
			$components[$i]->text = $row->text;
			$i++;
		}

		return $components;

	}

	/**
	 * joiEditor::get_toolbar()
	 *
	 * @param array $buttons
	 * @param string $toolbar_name
	 * @return
	 */
	function get_toolbar($buttons, $toolbar_name) {

		$all_buttons = array(
				'bold','italic','underline','justifyleft','justifycenter','justifyright','justifyfull','undo','redo',
				'styleselect','bullist','numlist','link','unlink','cut','copy','paste','pastetext','pasteword',
				'formatselect','image','forecolor','backcolor','strikethrough','outdent','indent','blockquote','hr','removeformat',
				'fontselect','sub','sup','spellchecker','iespell','cite','abbr','acronym','del','ins',
				'fontsizeselect','search','replace','anchor','cleanup','help','code','insertdate','inserttime','print',
				'tablecontrols','visualaid','attribs','save','newdocument','preview','media','fullscreen','advhr','emotions',
				'ltr','rtl','charmap','insertlayer','moveforward','movebackward','absolute','styleprops',
				'visualchars','nonbreaking','template','pagebreak'
		);

		$add_buttons = $this->_add_buttons;
		if(count($add_buttons)) {
			$all_buttons = array_merge ($all_buttons, $add_buttons);
		}

		$buttons_arr = explode(',', $buttons);

		$arr = array();
		$return = '';

		foreach($all_buttons as $button) {
			$checked = (in_array($button, $buttons_arr) ? 'checked="checked"' : '');
			$but = $this->draw_button($button);

			$arr[] = '	<td>
							<input title="'.$button.'" class="check_but" type="checkbox" name="'.$toolbar_name.'[]" value="'.$button.'" '.$checked.'/>				
							<br />
							'.$but.'
							<label>'.$button.'</label>
						</td>';	
		}

		$buttons_arr_chunk = array_chunk($arr, 10);

		$return .= '<table class="defaultSkin mce_buttons">';
		foreach($buttons_arr_chunk as $but_arr) {
			$return .= '<tr>';
			foreach($but_arr as $v) {
				$return .= $v;
			}
			$return .= '</tr>';
		}
		$return .= '</table>';

		return $return;
	}

	function draw_button($button) {

		$add_buttons = $this->_add_buttons;

		$class = $button;
		if(key_exists($button, $this->_classes)) {
			$class = $this->_classes[$button];
		}

		$img = '';
		if(in_array($button, $add_buttons)) {
			$img = JPATH_SITE.'/components/com_joieditor/add_buttons/'.$button.'.gif';
			$img = '<img src="'.$img.'" />';
		}

		return '<span title="'.$button.'" class="mceIcon mce_'.$class.'">'.$img.'</span>';
	}

	/**
	 * joiEditor::get_add_buttons()
	 *
	 * @return array
	 */
	function get_add_buttons() {
		$arr = array();

		$list = mosReadDirectory ( JPATH_BASE.DS.'components'.DS.'com_joieditor'.DS.'add_buttons', '.mce_button');

		foreach($list as $button) {
			if($button!=='.' && $button!=='..') {
				$arr[] = str_replace('.mce_button','', $button);
			}
		}
		return $arr;
	}

	/**
	 * joiEditor::get_theme_advanced_toolbar_location()
	 *
	 * @return array
	 */
	function get_theme_advanced_toolbar_location() {

		$arr = array('top'=>'top', 'bottom'=>'bottom');

		foreach($arr as $key=>$v) {
			$return[] = mosHTML::makeOption($key, $v);
		}

		return $return;

	}

	/**
	 * joiEditor::get_theme_advanced_toolbar_align()
	 *
	 * @return array
	 */
	function get_theme_advanced_toolbar_align() {

		$arr = array('left'=>'left', 'right'=>'right');

		foreach($arr as $key=>$v) {
			$return[] = mosHTML::makeOption($key, $v);
		}

		return $return;

	}

	/**
	 * joiEditor::get_theme_advanced_statusbar_location()
	 *
	 * @return array
	 */
	function get_theme_advanced_statusbar_location() {

		$arr = array('top'=>'top', 'bottom'=>'bottom', ''=>'disable');

		foreach($arr as $key=>$v) {
			$return[] = mosHTML::makeOption($key, $v);
		}

		return $return;

	}

	/**
	 * joiEditor::get_theme_advanced_resizing()
	 *
	 * @return array
	 */
	function get_theme_advanced_resizing() {

		$arr = array('true'=>'true', 'false'=>'false');

		foreach($arr as $key=>$v) {
			$return[] = mosHTML::makeOption($key, $v);
		}

		return $return;

	}

	/**
	 * joiEditor::check_user_dir()
	 *
	 * @param integer $user_id
	 * @return string
	 */
	function check_user_dir($user_id) {

		$dir = JPATH_BASE.DS.'images/user_images'.DS.$user_id;

		if (!is_dir($dir)) {
			if (!mkdir($dir,077,true)) {
				return false;
			}
			mosMainFrame::addLib('files');
			mosChmod($dir, 0777);
			return DS.'images/user_images'.DS.$user_id;
		}
		return DS.'images/user_images'.DS.$user_id;
	}

	/**
	 * joiEditor::check_file_access()
	 *
	 * @param string $file
	 * @return void
	 */
	function check_file_access($file) {

		if(is_writable($file)) {
			return true;
		}
		return false;
	}
}

class joiEditorHelper {

	function array_to_json( $array ) {

		if( !is_array( $array ) ) {
			return false;
		}

		$associative = count( array_diff( array_keys($array), array_keys( array_keys( $array )) ));
		if( $associative ) {

			$construct = array();
			foreach( $array as $key => $value ) {

				// We first copy each key/value pair into a staging array,
				// formatting each key and value properly as we go.

				// Format the key:
				if( is_numeric($key) ) {
					$key = "key_$key";
				}
				$key = "'".addslashes($key)."'";

				// Format the value:
				if( is_array( $value )) {
					$value = self::array_to_json( $value );
				} else if( !is_numeric( $value ) || is_string( $value ) ) {
					$value = "'".addslashes($value)."'";
				}

				// Add to staging array:
				$construct[] = "$key: $value";
			}

			// Then we collapse the staging array into the JSON form:
			$result = "{ " . implode( ", ", $construct ) . " }";

		} else { // If the array is a vector (not associative):

			$construct = array();
			foreach( $array as $value ) {

				// Format the value:
				if( is_array( $value )) {
					$value = array_to_json( $value );
				} else if( !is_numeric( $value ) || is_string( $value ) ) {
					$value = "'".addslashes($value)."'";
				}

				// Add to staging array:
				$construct[] = $value;
			}

			// Then we collapse the staging array into the JSON form:
			$result = "[ " . implode( ", ", $construct ) . " ]";
		}

		return $result;
	}
}


$lang_file = joiEditor::get_lang_file();
require_once($lang_file);